// 路由鉴权
import router from "./router";
import NProgress from 'nprogress';
import 'nprogress/nprogress.css'; // 引入进度条样式
import useUserStore from "./store/modules/user";
import pinia from "./store";
import nProgress from "nprogress";
let userStore = useUserStore(pinia);

nProgress.configure({
    showSpinner: false
})

// 全局守卫


// 前置守卫 【访问路由之前的】
// to 要访问的路由
// from 访问之前的路由
// 放行函数
router.beforeEach(async (to: any, from: any, next: any) => {
    NProgress.start(); // 开始进度条

    // 获取token，判断用户是否登录
    let token = userStore.token;
    // 用户名
    let username = userStore.username;

    if (token) { // 已登录
        if (to.path == '/login') {
            next({ path: '/' }) // 如果已经登录，访问登录页，重定向到首页
        } else {
            if (username) { // 有用户信息放行
                next()
            } else { // 无用户信息
                try {
                    await userStore.getUserInfo()
                    /// 刷新是异步路由，有可能获取到用户信息，异步路由还没有加载完毕，出现空白现象
                    next(...to); // 放行
                } catch (error) {
                    // token 过期，清除 token 和用户信息
                    userStore.clearLogoInfo;
                    next({ path: '/login', query: { redirect: to.path } }); // 重定向到登录页
                }
            }
        }
    } else { // 未登录
        // 判断是否访问登录页
        if (to.path === '/login') {
            next(); // 放行
        } else {
            next({ path: '/login', query: { redirect: to.path } }); // 重定向到登录页
        }
    }
}),


    // 后置守卫 【访问路由之后的】
    router.afterEach((to: any, from: any) => {
        NProgress.done(); // 结束进度条
    })